package com.huanhong.hik.service;


import com.huanhong.hik.bean.Plan;
import com.huanhong.hik.util.HCNetSDK;

import java.io.UnsupportedEncodingException;

public interface DeviceService {
    /**
     * 登录
     *
     * @param ip       IP地址
     * @param port     端口
     * @param username 用户名
     * @param password 密码
     * @return 用户id 小于0为登录失败
     */
    long login(String ip, int port, String username, String password);

    /**
     * 注销
     */
    void logout();

    /**
     * 获取设备网络信息
     *
     * @return
     */
    HCNetSDK.NET_DVR_NETCFG_V30 getNetwork();


    HCNetSDK.NET_DVR_DEVICECFG_V40 getDeviceConfig();

    /**
     * 设置设备网络信息
     *
     * @param mStrNetConfig
     * @return
     */
    boolean setNetwork(HCNetSDK.NET_DVR_NETCFG_V30 mStrNetConfig);

    boolean setNetwork(String alarmIp, int port);

    /**
     * 开启监听
     *
     * @param ip
     * @param port
     * @return 报警监听句柄
     */
    long startAlarmListen(String ip, int port);

    /**
     * 停止监听
     *
     * @return
     */
    boolean stopAlarmListen();

    /**
     * 获取所有卡
     */
    void getAllCard();

    /**
     * 根据卡号获取卡信息
     *
     * @param cardNo 卡号
     */
    void getCard(String cardNo);

    /**
     * 下发卡
     *
     * @param cardNo         卡号
     * @param cardValid      卡是否有效：0- 无效，1- 有效（用于删除卡，设置时置为0进行删除，获取时此字段始终为1）
     * @param validBeginTime 卡有效期 开始时间 yyyy-MM-dd HH:mm:ss
     * @param validEndTime   卡有效期 结束时间 yyyy-MM-dd HH:mm:ss
     * @param cardType       卡类型：1- 普通卡（默认），2- 残疾人卡，3- 黑名单卡，4- 巡更卡，5- 胁迫卡，6- 超级卡，7- 来宾卡，8- 解除卡，9- 员工卡，10- 应急卡，11- 应急管理卡（用于授权临时卡权限，本身不能开门），默认普通卡
     * @param doorRight      门权限 关联卡参数计划模板
     * @param leaderCard     是否为首卡：1- 是，0- 否
     * @param employeeNo     工号（用户ID）
     * @param name           名称
     * @param password       密码
     */
    void setCard(String cardNo, int cardValid, String validBeginTime, String validEndTime, int cardType, String doorRight, int leaderCard,
                 int employeeNo, String name, String password);

    /**
     * 根据卡号获取人脸信息
     *
     * @param cardNo 卡号
     */
    void getFace(String cardNo);

    /**
     * 设置人脸
     *
     * @param cardNo  卡号
     * @param faceUrl 人脸图片链接
     */
    void setFace(String cardNo, String faceUrl);

    /**
     * 删除人脸
     *
     * @param cardNo 卡号
     * @return true 成功 false 失败
     */
    boolean delFace(String cardNo);

    /**
     * 自定义卡权限计划模版
     *
     * @param struWeekPlanCond 卡权限周计划配置条件
     * @param struWeekPlanCfg  周计划配置
     * @param struPlanTem      计划模板配置
     * @return true 成功 false 失败
     * @throws UnsupportedEncodingException
     */
    boolean setPlan(HCNetSDK.NET_DVR_WEEK_PLAN_COND struWeekPlanCond, HCNetSDK.NET_DVR_WEEK_PLAN_CFG struWeekPlanCfg,
                    HCNetSDK.NET_DVR_PLAN_TEMPLATE struPlanTem) throws UnsupportedEncodingException;

    boolean setPlan(Plan plan) throws UnsupportedEncodingException;

    /**
     * 默认卡权限计划
     *
     * @return true 成功 false 失败
     * @throws UnsupportedEncodingException
     */
    boolean setPlan() throws UnsupportedEncodingException;

    /**
     * 布放
     *
     * @return true 成功 false 失败
     */
    boolean setupAlarmChan();

    /**
     * 撤防
     *
     * @return true 成功 false 失败
     */
    boolean closeAlarmChan();
}
